#ifndef ESTRATEGIA_MOVIMIENTO_H
#define ESTRATEGIA_MOVIMIENTO_H

#include "Punto.h"
#include "ObjetoVivo.h"
#include "math.h"

class EstrategiaMovimiento{

	protected:
		unsigned short velocidad ;
        unsigned short velocidadOriginal ;
        unsigned short contadorMovimiento; 
	public:

        EstrategiaMovimiento(unsigned short unaVelocidad){
            this->velocidad = unaVelocidad;
			this->velocidadOriginal =  unaVelocidad;
            this->contadorMovimiento = 0;
            }

        void volverAVelocidadOrigonal(){
            this->velocidad = this->velocidadOriginal;
            }

        Punto* mover(Punto* punto) {
            this->contadorMovimiento += this->velocidad;
            if( 100 <= this->contadorMovimiento){
                this->contadorMovimiento = this->contadorMovimiento % 100;
                return this->moverVirtual(punto);
            }
            
            return new Punto(punto);
			
        }

        virtual Punto* moverVirtual(Punto* punto) = 0;

		unsigned short getVelocidad(){
			return this->velocidad;
		}
        
        unsigned short getVelocidadOriginal(){
			return this->velocidadOriginal;
		}

		void setVelocidad(unsigned short unaVelocidad){
			this->velocidad = unaVelocidad ;
		}


        // Nesesario para aquellas estrategias que tienen una preasa.
        virtual void setPresa(ObjetoVivo* unaPresa){}

        virtual bool esEstrategiaVolverACueva() {return false;}
        virtual bool esEstrategiaEstarEnCueva(){return false;}
};

#endif 